package com.sise.Greedy;

/**
 *      11. 盛最多水的容器
 *
 *      给你 n 个非负整数 a1，a2，...，an，每个数代表坐标中的一个点 (i, ai) 。
 *      在坐标内画 n 条垂直线，垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。
 *
 *      说明：你不能倾斜容器。
 *
 *      题解:
 *          双指针，对比左右指针的高度，将 低高度 * 宽距离  => Math.min(begin, end) * (end - begin)。然后将高度较矮的往前移动一步
 *
 */
public class _11_maxArea {
    public int maxArea(int[] height) {
        int result = 0;
        int begin = 0;
        int end = height.length - 1;

        while (begin < end) {
            result = height[begin] < height[end]
                    ? Math.max(result, (end - begin) * height[begin++])     // 如果 begin < end 的高度，那么就按照 begin 的高度，因为面积是按照 最小高度 进行计算的(才不会漏水)
                    : Math.max(result, (end - begin) * height[end--]);
        }
        return result;
    }
}
